package com.castle.fortress.admin.cms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.cms.dto.CmsArticleDto;
import com.castle.fortress.admin.cms.entity.CmsArticleEntity;
import com.castle.fortress.admin.system.entity.SysUser;

import java.util.List;
import java.util.Map;

/**
 * cms内容管理表 服务类
 *
 * @author castle
 * @since 2022-03-10
 */
public interface CmsArticleService extends IService<CmsArticleEntity> {

    /**
     * 分页展示cms内容管理表列表
     * @param page
     * @param cmsArticleDto
     * @return
     */
    IPage<CmsArticleDto> pageCmsArticle(Page<CmsArticleDto> page, CmsArticleDto cmsArticleDto);

	/**
	 * 分页展示cms内容管理表扩展列表
	 * @param page
	 * @param cmsArticleDto
	 * @param roldIds
	 * @return
	 */
	IPage<CmsArticleDto> pageCmsArticleExtends(Page<CmsArticleDto> page, CmsArticleDto cmsArticleDto,List<Long> roldIds);
	/**
	 * cms内容管理表扩展详情
	 * @param id cms内容管理表id
	 * @return
	 */
    CmsArticleDto getByIdExtends(Long id);

    /**
     * 展示cms内容管理表列表
     * @param cmsArticleDto
     * @return
     */
    List<CmsArticleDto> listCmsArticle(CmsArticleDto cmsArticleDto);

	/**
	 * 查询指定栏目的已发布文章列表
	 * @param code
	 * @return
	 */
	List<CmsArticleDto> listByChannel(String code);
	/**
	 * 查询指定专题的已发布文章列表
	 * @param code
	 * @return
	 */
	List<CmsArticleDto> listBySubject(String code);
	/**
	 * 查询指定标签的已发布文章列表
	 * @param title
	 * @return
	 */
	List<CmsArticleDto> listByTag(String title);


	/**
	 * 用于cms标签 列表类栏目文章
	 * @param map
	 * @return
	 */
    List<Map<String,Object>> cmsTagChannelCmsArticle(Map<String, Object> map);
	/**
	 * 用于cms标签 列表类栏目文章总数
	 * @param map
	 * @return
	 */
	Integer cmsTagCountChannelCmsArticle(Map<String, Object> map);

	/**
	 * 用于cms标签 专题类栏目文章
	 * @param map
	 * @return
	 */
	List<CmsArticleDto> cmsTagSpecialCmsArticle(Map<String, Object> map);
	/**
	 * 用于cms标签 专题类文章总数
	 * @param map
	 * @return
	 */
	Integer cmsTagCountSpecialCmsArticle(Map<String, Object> map);


	/**
	 * 用于cms标签 自定义标签类栏目文章
	 * @param map
	 * @return
	 */
	List<CmsArticleDto> cmsTagTagCmsArticle(Map<String, Object> map);
	/**
	 * 用于cms标签 自定义标签类文章总数
	 * @param map
	 * @return
	 */
	Integer cmsTagCountTagCmsArticle(Map<String, Object> map);

	/**
	 * 用于cms标签 文章详情
	 * @param id cms内容管理表id
	 * @return
	 */
	CmsArticleDto cmsTagInfo(Long id);

	/**
	 * 用于cms标签 搜索类栏目文章
	 * @param map
	 * @return
	 */
	List<CmsArticleDto> cmsTagSearchCmsArticle(Map<String, Object> map);
	/**
	 * 用于cms标签 搜索类文章总数
	 * @param map
	 * @return
	 */
	Integer cmsTagCountSearchCmsArticle(Map<String, Object> map);

	/**
	 * cms内容管理表扩展详情
	 * @param id cms内容管理表id
	 * @return
	 */
	CmsArticleDto cmsTagGtByIdExtends(Long id);

    IPage<CmsArticleDto> pageAudit(Page<CmsArticleDto> page, CmsArticleDto cmsArticleDto, SysUser user);

	/**
	 * 批量移动栏目
	 * @param ids
	 * @param channelId
	 * @return
	 */
	boolean moveChannel(List<Long> ids, Long channelId);

	/**
	 * 移动到草稿箱
	 * @param ids
	 * @return
	 */
	boolean toDrafts(List<Long> ids);

	/**
	 * 彻底删除
	 * @param ids
	 * @return
	 */
	boolean toDelReal(List<Long> ids);

	/**
	 * 彻底删除
	 * @param ids
	 * @return
	 */
	boolean toGarbage(List<Long> ids);

	/**
	 * 栏目取消审核
	 * @param channelId
	 */
	void cancelAudit(Long channelId);
}
